#ifndef BASE_FSR_H
#define BASE_FSR_H

/*
无人机上发数据
格式:$FSR,Device Flag,Status,X,Y,Mode,Height,,,,,*CS,<CR><LF>
| 字段 | 名称         | 格式         | 参数说明                                                     |
| ---- | ------------ | ------------ | ------------------------------------------------------------ |
| 1    | $FSR         | 字符串       | 消息ID，语句头                                               |
| 2    | Device Flag  | 十六进制数值 | 当前设备的标识符                                             |
| 3    | Status       | 字符串       | 数据有效标志。V=数据无效 A=数据有效                          |
| 4    | X            | 数值         | 当前设备所处坐标x轴位置（毫米，整数）                        |
| 5    | Y            | 数值         | 当前设备所处坐标y轴位置（毫米，整数）                        |
| 6    | Mode         | 字符串       | auto=自动控制模式，manual = 手动控制模式（机器人、无人机数据） |
| 7    | Progress     | 字符串       | 参考附件（机器人数据）                                       |
| 8    | Height       | 数值         | 无人机当前高度（毫米，整数）                                 |
| 9    | Water        | 数值         | 水流量（三位小数）                                           |
| 10   | Humidness    | 数值         | 土壤湿度（两位小数）                                         |
| 11   | Temperature  | 数值         | 土壤温度（两位小数）                                         |
| 12   | PH           | 数值         | 土壤pH值（两位小数）                                         |
| 13   | WateValve    | 数值         | 水阀状态 ，0 = 水阀关闭 ，1 = 水阀开启                       |
| 14   | CS           | 16进制数值   | 校验和， \$和\*之间（不包括\$和\*） 所有字符的异或结果       |
| 15   |  <CR><LF>    | 字符         | 回车与换行符                                                 |
*/

/*
中控下发无人机指令
格式:$FSR,Status,Height,X,Y*CS,<CR><LF>
样例:$FSR,set,160,400,500*13
| 字段 | 名称         | 格式       | 参数说明                                                     |
| ---- | ------------ | ---------- | ------------------------------------------------------------ |
| 1    | $FSR         | 字符串     | 消息ID，语句头                                               |
| 2    | Status       | 字符串     | start = 开始执行任务，stop = 急停，back =返航，set =设置目标 |
| 3    | Height       | 数值       | 目标高度（毫米，整数）                                       |
| 4    | X            | 数值       | 目标1坐标x轴位置（毫米，整数）                               |
| 5    | Y            | 数值       | 目标1坐标y轴位置（毫米，整数）                               |
| ...  | XY           |            | 预留数据位,目标n坐标位置                                     |
| 6    | CS           | 16进制数值  | 校验和， \$和\*之间（不包括\$和\*） 所有字符的异或结果       |
| 7    | <CR><LF>     | 字符       | 回车与换行符                                                 |
*/

#define BUF_MAX 150      // 最大数据长度
#define Device_Flag 0x12 // 当前设备号

// FSR_recv_data结构体
typedef struct
{
    char Status[10]; // 无人机状态
    int Height;      // 目标高度
    int X1;          // 目标1 x轴坐标
    int Y1;          // 目标2 y轴坐标
    int SumCheck;    // 校验位

    int Wate_Value;   //水阀状态
} FSR_recv_data;
typedef struct
{
    int DeviceFlag;  // 设备序列号
    char Status[10]; // 无人机状态
    int Height;      // 当前高度
    int Point_X;     // 当前x轴坐标
    int Point_Y;     // 当前y轴坐标

    float Water,Humidness,Temperature,PH;   //水流量，土壤湿度，土壤温度，土壤PH
    int WateValue;   //水阀状态
    
    int SumCheck;    // 校验位
} FSR_send_data;
// 无人机起飞指令
typedef enum
{
    FLY_Start = 0x00,
    FLY_Stop,
    FLY_Len
} FLY_STATUS;

extern FSR_recv_data RecvFSR;         // TCP接收到的解析数据缓存区
extern FSR_recv_data *const pRecvFSR; // FSR解析输出缓存区,该指针指向固定的地址
extern FSR_send_data SendFSR;         // TCP发送的解析数据缓存区
extern FSR_send_data *const pSendFSR;

extern char TCP_RX_BUF[];  // TCP接收缓存区
extern char TCP_TX_BUF[];  // TCP发送缓存区
extern char UART_RX_BUF[]; // 串口接收缓存区

int FSR_ReceiveHandle(void);
void FSR_TransmitHandle(void);
void FSR_UART_ReceiveHandle(void);
void FSR_UART_ToFLY(FLY_STATUS status);
void FSR_Init(int DeviceFlag);
#endif